package com.varian.auth.model.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.varian.mybatis.base.PrimaryKeyEntity;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @author ben
 * @since 2024/6/28
 */
@Data
@TableName(value = "oauth2_authorization", autoResultMap = true)
public class OAuth2AuthorizationInfo extends PrimaryKeyEntity {

    /**
     * 注册客户端ID
     */
    private Long registeredClientId;
    /**
     * 主体名称
     */
    private String principalName;
    /**
     * 授权类型
     */
    private String authorizationGrantType;
    /**
     * 授权范围
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<String> authorizedScopes;
    /**
     * 附加属性
     */
    private String attributes;
    /**
     * 状态信息
     */
    private String state;
    /**
     * 授权码
     */
    private String authorizationCodeValue;
    /**
     * 授权码发放时间
     */
    private LocalDateTime authorizationCodeIssuedAt;
    /**
     * 授权码过期时间
     */
    private LocalDateTime authorizationCodeExpiresAt;
    /**
     * 授权码元数据
     */
    private String authorizationCodeMetadata;
    /**
     * 访问令牌
     */
    private String accessTokenValue;
    /**
     * 访问令牌发放时间
     */
    private LocalDateTime accessTokenIssuedAt;
    /**
     * 访问令牌过期时间
     */
    private LocalDateTime accessTokenExpiresAt;
    /**
     * 访问令牌元数据
     */
    private String accessTokenMetadata;
    /**
     * 令牌类型
     */
    private String accessTokenType;
    /**
     * 访问范围
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<String> accessTokenScopes;
    /**
     * OIDC
     */
    private String oidcIdTokenValue;
    /**
     * ID令牌发放时间
     */
    private LocalDateTime oidcIdTokenIssuedAt;
    /**
     * ID令牌过期时间
     */
    private LocalDateTime oidcIdTokenExpiresAt;
    /**
     * ID令牌元数据
     */
    private String oidcIdTokenMetadata;
    /**
     * 刷新令牌
     */
    private String refreshTokenValue;
    /**
     * 刷新令牌发放时间
     */
    private LocalDateTime refreshTokenIssuedAt;
    /**
     * 刷新令牌过期时间
     */
    private LocalDateTime refreshTokenExpiresAt;
    /**
     * 刷新令牌元数据
     */
    private String refreshTokenMetadata;
    /**
     * 用户验证码
     */
    private String userCodeValue;
    /**
     * 用户码发放时间
     */
    private LocalDateTime userCodeIssuedAt;
    /**
     * 用户码过期时间
     */
    private LocalDateTime userCodeExpiresAt;
    /**
     * 用户码元数据
     */
    private String userCodeMetadata;
    /**
     * 设备验证码
     */
    private String deviceCodeValue;
    /**
     * 设备码发放时间
     */
    private LocalDateTime deviceCodeIssuedAt;
    /**
     * 设备码过期时间
     */
    private LocalDateTime deviceCodeExpiresAt;
    /**
     * 设备码元数据
     */
    private String deviceCodeMetadata;
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    /**
     * 版本
     */
    @Version
    private Integer version;
    /**
     * 删除标记
     */
    @TableField("is_deleted")
    @TableLogic(value = "0", delval = "1")
    private Boolean deleted;
}
